package 面向对象;
/**
	单例类设计模式
	1,构造方法私有化，外部无法(new)创建对象
	2,声明一个本类对象
	3,给外部一个静态方法(类方法)获取对象实例
	保证一个类只能有一个实例，节省重复创建对象带来的内存消耗，提高效率
	一般用在设计工具类(通常只有方法没有属性)，工具栏重复被使用
	工具类还可以用 构造方法私有化+类方法实现如Math类
	tips:*static修饰符
	     *静态方法(类方法)、静态变量(类变量)属于类本身，
		 *在类创建时就初始化，所以类方法只能访问类变量
		 *因为初始化时，普通变量还没有声明，无法访问
*/
public class 单例类
{   
    public static void main(String[] args){
		//Singleton1 s=new Singleton1();
		Singleton1 s=Singleton1.getInstance();
		s.print();
	}
	
}
//先创建本类对象，效率高，占用内存时间长
class Singleton1{
	private Singleton1(){};//构造方法私有化，所以外部不能new出对象
	private static Singleton1 s=new Singleton1();
	public static Singleton1 getInstance(){
		return s;
	}
	public void print(){
		System.out.println("测试方法");
	}
}
//先声明不创建本类对象，只有当调用时再创建，效率稍低，占用内存时间短
class Singleton2{
	private static Singleton2 s;
	private Singleton2(){};
	public static Singleton2 getInstance(){
		if(s==null){
			s=new Singleton2();
		}
		return s;
	}
	public void print(){
		System.out.println("测试方法");
	}
}
